home *** CD-ROM | disk | FTP | other *** search
/ Quick PC 61 / Quick PC 61.iso / I386 / WMS.CAB / treecode.js < prev    next >
Encoding:
JavaScript  |  2003-02-21  |  11.9 KB  |  466 lines

  1. /* Copyright (c) Microsoft Corporation.  All rights reserved. */
  2. var treeRoot;
  3. var szMinusTag    = '<IMG SRC="img/_minus.gif" ALT="Click to collapse" ALIGN="MIDDLE">';
  4. var szPlusTag    = '<IMG SRC="img/_plus.gif" ALT="Click to expand" ALIGN="MIDDLE">';
  5. var szSpacerTag    = '<IMG SRC="img/spacer.gif" ALIGN="MIDDLE" HEIGHT=15 WIDTH=';
  6. var szOpenNodes = "";    
  7. var nzInterval             = 0;
  8. var nzSetTocSyncInterval = 0;
  9. var ozActive;
  10. var nzPopUpWidth         = 500;
  11. var szPopUpText         = "";
  12. var nzLastClicked     = -1;
  13. var nzLocked                = -1;
  14. var oPopup                 = 0;
  15. var oPopupBody             = 0;
  16. var szCookieOpenNodes         = "helpTreeOpenNodes";
  17. var szCookieActiveTopic     = "helpTreeActiveTopic";
  18. var szCookieActiveURL         = "helpTreeActiveURL";
  19. function InitTree()
  20. {
  21.     if (nzLocked == 0) return;
  22.     LockProcess();
  23.     treeRoot = oTree;
  24.     SetOpenNodes();
  25.     RenderTree();
  26.     SetLinkFocus();
  27.     UnlockProcess();
  28. }
  29. function getBrowserVersion()
  30. {
  31.     if (glbBrowserCode == 10 && glbVersion > 5)
  32.     {
  33.         return 6;
  34.     }
  35.     if (( glbBrowserCode == 10 ) && (glbVersion == 5) && (glbSubVersion >= 5) )
  36.     {
  37.         return 5.5;
  38.     }
  39.     if (( glbBrowserCode == 10 ) && (glbVersion == 5) && (glbSubVersion >= 0) )
  40.     {
  41.         return 5;
  42.     }
  43.     return 4;
  44. }
  45. function SetSyncToc()
  46. {
  47.     var s = "<A ID='idTocSync' TITLE='Locate current topic in the Table of Contents pane' HREF='' onclick='SynchToc(); return false;'><IMG STYLE='top:6; position: relative; margin: 1;' SRC='../img/synctoc.gif' BORDER='0'>Sync TOC</A>" ;
  48.     
  49.     
  50.         if (parent.main.idSyncToc)
  51.         {
  52.             parent.main.idSyncToc.innerHTML = s;
  53.         }
  54. }
  55. function SetActiveDocument()
  56. {
  57.     var sActiveDocument = GetCookie(szCookieActiveURL);
  58.     if(sActiveDocument != "")
  59.     {
  60.         var s = parent.main.document.location;
  61.         if (s)
  62.         {
  63.             var strVariable1 = unescape(s);
  64.             var strVariable2 = unescape(sActiveDocument);
  65.             strVariable1 = strVariable1.toLowerCase( );
  66.             strVariable2 = strVariable2.toLowerCase( );
  67.             if (strVariable1 != strVariable2)
  68.             {
  69.                 parent.main.document.location.replace(sActiveDocument)
  70.             }
  71.         }
  72.     };
  73. }
  74. function SetActiveTopic()
  75. {
  76.     var sActiveTopic = GetCookie(szCookieActiveTopic);
  77.     if(sActiveTopic != "")
  78.     {
  79.         nzLastClicked = sActiveTopic;
  80.         ExpandBranch(nzLastClicked);
  81.     };
  82. }
  83.     
  84. function SetDefaultOpenTreeNodes()
  85. {
  86.     SetActiveTopic();
  87.     SetActiveDocument();
  88.     if (GetCookie(szCookieOpenNodes) == "")
  89.     {
  90.         if(nzLastClicked > -1)
  91.         {
  92.             SetCookie(szCookieOpenNodes + "=" + "<" + nzLastClicked + ">:", sCookieExp);
  93.         }
  94.         else
  95.         {
  96.             SetCookie(szCookieOpenNodes + "=" + "<0>:", sCookieExp);
  97.         }
  98.     }
  99.     parent.treesrc.document.location="tree.htm";
  100. }
  101. function InitPopUp()
  102. {
  103.     if (nIEVer >= 5.5)
  104.     {
  105.         oPopup = window.createPopup();
  106.         oPopupBody = oPopup.document.body;
  107.         oPopupBody.innerHTML = "<SPAN ID='idPopText'></SPAN>"
  108.     }
  109. }
  110. function SetOpenNodes()
  111. {
  112.     var i, s;
  113.     szOpenNodes = GetCookie(szCookieOpenNodes);
  114.     if(szOpenNodes == "")
  115.     {
  116.         return;
  117.     }
  118.     var openIds = szOpenNodes.split(':');
  119.     for(i = 0; i < openIds.length; i++)
  120.     {
  121.         if(openIds[i])
  122.         {
  123.             s = openIds[i];
  124.             s = Replace(s, "<","");
  125.             s = Replace(s, ">","");
  126.             Expand(s);
  127.         }
  128.     }
  129. }
  130. function GetTreeNode(t, nID)
  131. {
  132.     var oNode;
  133.     var i;
  134.     if (!t) return null;
  135.     if(nID == t.id)
  136.     {
  137.         return t;
  138.     }
  139.     else
  140.     {
  141.         for(i=0; i < t.children.length; i++)
  142.         {
  143.             oNode = GetTreeNode(t.children[i], nID);
  144.             if(oNode != null)
  145.             {
  146.                 return oNode;
  147.             }
  148.         }
  149.     }
  150.     return null;
  151. }
  152. function PlusMinusClick(nID)
  153. {
  154.     var i;
  155.     var oNode;
  156.     var sWhat         = "";
  157.     var sWith         = "";
  158.     if (nzLocked == 0) return false;
  159.     LockProcess();
  160.     szOpenNodes = GetCookie(szCookieOpenNodes);
  161.     oNode = GetTreeNode(treeRoot, nID);
  162.     oNode.open = (oNode.open == 0 ? 1 : 0);
  163.     if(oNode.open == 1)
  164.     {
  165.         szOpenNodes = szOpenNodes + "<" + oNode.id + ">:";
  166.     } else {
  167.         oNode.open = 0;
  168.     
  169.         if (oNode.id == 0)
  170.         {
  171.             szOpenNodes = "";
  172.             CloseChildNodes(oNode);
  173.             sWhat = "<" + oNode.id + ">:";
  174.         }
  175.         else
  176.         {
  177.             CloseChildNodes(oNode);
  178.             sWhat = "<" + oNode.id + ">:";
  179.             szOpenNodes = Replace(szOpenNodes, sWhat, sWith);
  180.         }
  181.     }
  182.     SetCookie(szCookieOpenNodes + "=" + szOpenNodes, sCookieExp);
  183.     parent.treesrc.document.location.replace(parent.treesrc.document.location);
  184.     UnlockProcess();
  185.     return false;
  186. }
  187. function GetChildNodes(oNode, sDepth)
  188. {
  189.     var i            = 0;
  190.     var s             = "";
  191.     var sWhat         = "";
  192.     var sWith         = "";
  193.     sDepth             += "--+";
  194.     if (oNode.children)
  195.     {
  196.         for (i = 0; i < oNode.children.length; i ++)
  197.         {
  198.             s += "<LI> (ID=" + oNode.children[i].id +  ") <B>" + sDepth + "[isChild=" + oNode.children[i].isChild + "]</B> " + oNode.children[i].name + "";
  199.             if (oNode.children[i].isChild == true)
  200.             {
  201.                 s += GetChildNodes(oNode.children[i], sDepth);
  202.             }
  203.         }
  204.     }
  205.     return s;
  206. }
  207. function CloseChildNodes(oNode)
  208. {
  209.     var i            = 0;
  210.     var s             = "";
  211.     var sStr         = szOpenNodes;
  212.     var sWhat         = "";
  213.     var sWith         = "";
  214.     if (oNode.children)
  215.     {    
  216.         for (i = 0; i < oNode.children.length; i ++)
  217.         {
  218.             sWhat = "<" + oNode.children[i].id + ">:";
  219.             oNode.children[i].open = 0;
  220.             szOpenNodes = Replace(szOpenNodes, sWhat, sWith);
  221.             if (oNode.children[i].isChild == true)
  222.             {
  223.                 CloseChildNodes(oNode.children[i]);
  224.             }
  225.         }
  226.     }
  227.     return;
  228. }
  229. function Replace(sStr, sWhat, sWith)
  230. {
  231.     sStr = sStr.replace(sWhat, sWith);
  232.     return sStr;
  233. }
  234. function RenderTree()
  235. {
  236.     parent.treebody.document.open();
  237.     WriteTreeHeader();
  238.     WriteTreeBody(treeRoot, 0);
  239.     WriteTreeFooter();
  240.     parent.treebody.document.close();
  241. }
  242. function WriteTreeHeader()
  243. {
  244.     var s = "";
  245.     var sStyle = "position:absolute; top:1; width:1; padding: 0; padding-left: 0; height:10; border-width:1; border-style:solid; border-color:white;";
  246.     s += "<HTML><HEAD>";
  247.     s += "<STYLE> .clicked {background-color:navy; " + sStyle + " border-color:black; color:white;} .normal {background-color:white;" + sStyle + " } td {font-size: 8pt; font-family: Verdana, Arial, Helvetica, Sans Serif; padding:0; padding-left: 4pt; padding-bottom: 1pt; margin:0; position:relative;} a {text-decoration:none; cursor:hand;} a:link, a:visited, a:active, a:hover {color: black;} img {border-width:0;} </STYLE>";
  248.     s += "</HEAD><BODY BGCOLOR=#ffffff TOPMARGIN=2 LEFTMARGIN=0 onmouseover='parent.HidePopUp()'>";
  249.     s += "<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 LastClicked='-1' id=idTreeTable>\n";
  250.     parent.treebody.document.write(s);
  251. }
  252. function WriteTreeFooter()
  253. {
  254.     var s = "";
  255.     s += "<TR><TD><NOBR><DIV ID='idDynamicLength' STYLE='width:60; height:10; overflow:scroll; visibility:hidden; position:relative;'></DIV></NOBR></TD></TR>";
  256.     s += "</TABLE>";
  257.     s += "</BODY>";
  258.     s += "</HTML>";
  259.     parent.treebody.document.write(s);
  260. }
  261. function WriteTreeBody(oNode, iDepth)
  262. {
  263.     var i, j;
  264.     var sValue             = "";
  265.     var sClass             = "";
  266.     var bDblClick        = "";
  267.     var nWidth            = 0;
  268.     var bFileNode        = "";
  269.     var sDoubleClickCall = "";
  270.     nzLastClicked == oNode.id ? sClass = "clicked" : sClass = "normal" ;
  271.     bDblClick = (oNode.children.length > 0 && oNode.open == 0) ? true: false;
  272.     bFileNode = (oNode.children.length == 0) ? true : false;
  273.     
  274.     nWidth = (iDepth * 15);
  275.     if (bFileNode == true) nWidth = nWidth + 15;
  276.     
  277.     sValue += "<TR><TD><NOBR>";
  278.     sValue += szSpacerTag + nWidth + ">" ;
  279.     if(oNode.children.length > 0)
  280.     {
  281.         sValue += "<A HREF='' onclick='return parent.PlusMinusClick(" + oNode.id + ")'>";
  282.         if(oNode.open)
  283.         {
  284.             sValue += szMinusTag;
  285.         }
  286.         else
  287.         {
  288.             sValue += szPlusTag;
  289.             sDoubleClickCall = ' parent.SetLastClicked(' + oNode.id + '); return parent.PlusMinusClick(' + oNode.id + ')';
  290.         }
  291.         sValue += "</A>";
  292.     }
  293.     sValue += "<A TARGET='main' TABINDEX='-1' HREF='" + oNode.href + "' TEXT=\"" + oNode.name + "\" onmouseover='parent.DisplayPopUp(this)' ID=LNK" + oNode.id + " IDX="+ oNode.id + " onclick='parent.HighliteElement(this)' ondblclick='" + sDoubleClickCall + "' DblClick=" + bDblClick + ">";
  294.     
  295.     if(bFileNode == true)
  296.     {
  297.         sValue += oNode.imgFTag + "<SPAN TABINDEX=0 CLASS=" + sClass + ">" + oNode.shortname + "</SPAN>";
  298.     }
  299.     else
  300.     {
  301.         if(oNode.open)
  302.         {
  303.             sValue += oNode.imgOTag + "<SPAN TABINDEX=0 CLASS=" + sClass + ">" + oNode.shortname + "</SPAN>";
  304.         }
  305.         else
  306.         {
  307.             sValue += oNode.imgCTag + "<SPAN TABINDEX=0 CLASS=" + sClass + ">" + oNode.shortname+ "</SPAN>";
  308.         }
  309.     }
  310.     sValue += "</A>";
  311.     sValue += "</NOBR></TD></TR>\n";
  312.     parent.treebody.document.write(sValue);
  313.     if(oNode.open)
  314.     {
  315.         for(i=0; i < oNode.children.length; i++)
  316.         {
  317.             WriteTreeBody(oNode.children[i], iDepth+1);
  318.         }
  319.     }
  320. }
  321. function HighliteElement(oObj)
  322. {
  323.     if (nzLocked == 0) return;
  324.     if (nIEVer < nOK) return;
  325.     
  326.     LockProcess();
  327.     var oLast = eval("parent.treebody.document.all.LNK" + nzLastClicked);
  328.     if (oLast)
  329.     {
  330.         oLast.childNodes[1].className = "normal";
  331.     }
  332.     oObj.childNodes[1].className = "clicked";
  333.     SetLastClicked(oObj.IDX);
  334.     UnlockProcess();
  335. }
  336. function SetLinkFocus()
  337. {
  338.     
  339.     if (nIEVer < nOK) return;
  340.     if (nzLastClicked < 0) return;
  341.     var oObj = eval("parent.treebody.document.all.LNK" + nzLastClicked);
  342.     if (oObj){
  343.         while (oObj.tagName != "TD")
  344.         {
  345.             oObj = oObj.parentElement;
  346.         }
  347.         oObj.focus();
  348.     }
  349. }
  350. function Expand(nIndex)
  351. {
  352.     var    oNode;
  353.     ExpandNode(nIndex);
  354.     oNode = GetTreeNode(treeRoot, nIndex);
  355.     if(!oNode) return null;
  356.     while (oNode.id > -1)
  357.     {
  358.         ExpandNode(oNode.id);
  359.         oNode = oNode.parent;
  360.     }
  361. }
  362. function ExpandBranch(nIndex)
  363. {
  364.     if (nIndex < 0) return;
  365.     var    oNode;
  366.     SetLastClicked(nIndex);
  367.     oNode = ExpandNode(nIndex);
  368.     if (!oNode) return null;
  369.     while (oNode.id > -1)
  370.     {
  371.         ExpandNode(oNode.id);
  372.         oNode = oNode.parent;
  373.     }
  374.     
  375.     parent.treesrc.document.location.replace(parent.treesrc.document.location);
  376. }
  377. function ExpandNode(nIndex)
  378. {
  379.     var i;
  380.     var oNode;
  381.     oNode = GetTreeNode(treeRoot, nIndex);
  382.     if (!oNode) return null;
  383.     (oNode.children.length > 0) ?  oNode.open = 1 : oNode.open = 0;
  384.     if(oNode.open == 1)
  385.     {
  386.         if (IsClosedNode(oNode.id) == true)
  387.         {
  388.             szOpenNodes = szOpenNodes + "<" + oNode.id + ">:";
  389.             SetCookie(szCookieOpenNodes + "=" + szOpenNodes, sCookieExp);
  390.         }
  391.     }
  392.     return oNode;
  393. }
  394. function IsClosedNode(n)
  395. {
  396.     var i;
  397.     var s;
  398.     if(!szOpenNodes)
  399.     {
  400.         return true;
  401.     }
  402.     else
  403.     {
  404.         if (szOpenNodes.indexOf(n) < 0) {return true;}else{return false;}
  405.     }
  406. }
  407. function DisplayPopUp(oObj)
  408. {
  409.     if (parent.oPopup == 0) return;
  410.     clearTimeout(nzInterval);
  411.     HidePopUp();
  412.     var bResize;
  413.     var sShortName         = oObj.innerText;
  414.     var sLongName         = oObj.TEXT;
  415.     ozActive = oObj;
  416.     sShortName.indexOf(" ...") > -1 ? bResize = false : bResize = true ;
  417.     SetPopUpText(sLongName, oObj);
  418.     SetPopUpWidth(sLongName, bResize, oObj);
  419.     nzInterval = setTimeout("parent.oPopup.show(23, 1, parent.nzPopUpWidth, 15, parent.ozActive)", 100);
  420. }
  421. function HidePopUp()
  422. {
  423.     if (parent.oPopup == 0) return;
  424.     parent.oPopup.hide();
  425. }
  426. function SetPopUpText(sStr, oObj)
  427. {
  428.     if (parent.oPopup == 0) return;
  429.     parent.idTreeBody.idDynamicLength.innerHTML = sStr;
  430.     var id                 = oObj.IDX;
  431.     var sDoubleClickCall = "";
  432.     var sStyle             = "font-size: 8pt; font-family: Verdana, Arial, Helvetica, Sans Serif; padding:0; padding-left: 0; margin-top: 0; margin-left: 0; width: 100%; border-width: 1; border-style:solid; background-color:#ffffff; cursor:hand;";
  433.     if (oObj.DblClick == "true") {sDoubleClickCall = "parent.SetLastClicked(" + id + "); parent.PlusMinusClick(\"" + id + "\"); parent.HidePopUp(); return false;" };
  434.     szPopUpText = "<SPAN onmouseout='parent.HidePopUp() ; ' onclick='parent.ozActive.click();' ondblclick='" + sDoubleClickCall + " ; ' STYLE='" + sStyle + "'><NOBR>" + sStr + "</NOBR></SPAN>";
  435.     parent.oPopupBody.innerHTML = szPopUpText;
  436.     return szPopUpText;
  437. }
  438. function SetPopUpWidth(sStr, bResize, oObj)
  439. {
  440.     if (parent.oPopup == 0) return;
  441.     nzPopUpWidth = parent.idTreeBody.idDynamicLength.scrollWidth + 3;
  442.     return nzPopUpWidth;
  443. }
  444. function LockProcess()
  445. {
  446.     nzLocked = 0;
  447. }
  448. function UnlockProcess()
  449. {
  450.     nzLocked = 1;
  451. }
  452. function SetLastClicked(nIndex)
  453. {
  454.     nzLastClicked = nIndex;
  455.     SaveLastOpenedDocument();
  456. }
  457. function SaveLastOpenedDocument()
  458. {
  459.     SetCookie(szCookieActiveTopic + "=" + nzLastClicked, sCookieExp);
  460.     var oLast = eval("parent.treebody.document.all.LNK" + nzLastClicked);
  461.     if(oLast)
  462.     {
  463.         SetCookie(szCookieActiveURL + "=" + oLast.href, sCookieExp);
  464.     }
  465. }
  466.